home *** CD-ROM | disk | FTP | other *** search
- /* amiga/scroll.c
- vi:ts=3 sw=3:
- */
-
- /* $Id: scroll.c,v 1.4 1995/05/11 12:09:26 espie Exp espie $
- * $Log: scroll.c,v $
- * Revision 1.4 1995/05/11 12:09:26 espie
- * Dummy call added.
- *
- * Revision 1.3 1995/02/14 16:51:22 espie
- * *** empty log message ***
- *
- * Revision 1.2 1995/02/13 22:05:42 espie
- * Added one space to buffer.
- *
- * Revision 1.1 1995/01/13 13:31:35 espie
- * Initial revision
- *
- */
-
- #include <proto/exec.h>
-
- #include "defs.h"
- #include "extern.h"
- #include "amiga/amiga.h"
- #include "prefs.h"
- ID("$Id")
-
- XT unsigned int inhibit_output;
-
- LOCAL void init_scroll(void);
- LOCAL void (*INIT)(void) = init_scroll;
-
- /* the special structure to display lines
- *
- */
- LOCAL struct MinList scrolls;
-
- struct scroll_line
- {
- struct MinNode node;
- char buffer[80];
- };
-
- LOCAL void init_scroll()
- {
- NewList(&scrolls);
- }
-
- /***
- ***
- *** Scrolling line handling:
- *** note this is totally asynchronous and uses the TYPE_DO_SYNC
- *** message for synchronizing with songs that are really played
- ***/
-
- LOCAL struct scroll_line *scroll_buffer = 0;
-
- char *new_scroll(void)
- {
- char *s;
- /* need some temporary storage in case everything is full */
- LOCAL char buffer[80];
-
- INIT_ONCE;
- /* check for a scroll line available */
- scroll_buffer = RemHead(&scrolls);
- if (!scroll_buffer) /* none available ? allocate one on the fly */
- scroll_buffer = malloc(sizeof(struct scroll_line));
- if (scroll_buffer)
- s = scroll_buffer->buffer;
- else /* still none ? use static buffer */
- s = buffer;
- strcpy(s, " ");
- return s;
- }
-
- /* The actual hook that does all the printing */
- LOCAL void do_scroll(VALUE p)
- {
- struct scroll_line *s = p.pointer;
-
- if (inhibit_output == 0 && get_pref_scalar(PREF_SHOW))
- {
- add_scroller(s->buffer);
- }
- AddTail(&scrolls, s);
- }
-
- void scroll()
- {
- struct ext_message *msg;
-
- if (scroll_buffer) /* did we obtain a scroll line ? */
- { /* then set up to scroll it */
- msg = obtain_message();
- msg->data.hook.func = do_scroll;
- msg->data.hook.p.pointer = scroll_buffer;
- send(msg, TYPE_SYNC_DO);
- }
- scroll_buffer = 0;
- }
-
- void set_number_tracks(n)
- int n;
- {
- }
-